home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMICUS04.ADF / C / regintes.c < prev    next >
C/C++ Source or Header  |  1985-10-30  |  5KB  |  172 lines

  1. /* region test program v1.0 */
  2. /****************************************************************
  3. *                                                               *
  4. * Copyright 1985, Commodore Amiga Inc.  All rights reserved.    *
  5. * No part of this program may be reproduced, transmitted,       *
  6. * transcribed, stored in retrieval system, or translated into   *
  7. * any language or computer language, in any form or by any      *
  8. * means, electronic, mechanical, magnetic, optical, chemical,   *
  9. * manual or otherwise, without the prior written permission of  *
  10. * Commodore Amiga Incorporated, 983 University Ave, #D          *
  11. * Los Gatos, CA 95030                                           *
  12. *                                                               *
  13. ****************************************************************/
  14.  
  15. /* SIMPLE REGIONS EXAMPLE.... DRAW BEHIND A FENCE */
  16.  
  17. #include <exec/types.h>
  18. #include <graphics/gfx.h>
  19. #include <hardware/dmabits.h>
  20. #include <hardware/custom.h>
  21. #include <graphics/gfxmacros.h>
  22. #include <graphics/rastport.h>
  23. #include <graphics/view.h>
  24. #include <exec/exec.h>
  25. #include <graphics/layers.h>
  26. #include <graphics/clip.h>
  27. #define FLAGS LAYERSIMPLE
  28. extern struct Layer *CreateUpfrontLayer();
  29.  
  30. #define DEPTH 2  
  31. #define WIDTH 320 
  32. #define HEIGHT 200 
  33. #define NOT_ENOUGH_MEMORY -1000
  34. #define FOREVER for(;;) 
  35.  
  36. struct View v;
  37. struct ViewPort vp;
  38. struct ColorMap *cm;
  39. struct RasInfo ri;
  40. struct BitMap b;
  41.  
  42. struct RastPort *rp;            /* one rastport for one layer */
  43.  
  44. short i,j,k,n;
  45. struct ColorMap *GetColorMap();
  46. struct GfxBase *GfxBase;
  47.  
  48. USHORT colortable[] = { 0x000, 0xf00, 0x0f0, 0x00f };
  49.                         /* black, red, green, blue */
  50. UBYTE *displaymem;
  51. UWORD *colorpalette;
  52.  
  53. struct LayersBase *LayersBase;
  54. struct Layer_Info li;
  55. struct Layer *layer;            /* one layer pointer */
  56.  
  57. extern struct Region *NewRegion();
  58. struct Region *rgn;             /* one region pointer */
  59. struct Rectangle rect[14];      /* some rectangle structures */
  60. struct Region *oldDamageList;
  61.  
  62. main()
  63. {
  64.         SHORT x,y;
  65.  
  66.         GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0);
  67.         if (GfxBase == NULL) exit(1);
  68.         LayersBase = (struct LayersBase *)OpenLibrary("layers.library",0); 
  69.         if(LayersBase == NULL) exit(2);
  70.         InitLayers(&li);
  71.         InitView(&v);
  72.         v.ViewPort = &vp;
  73.         InitVPort(&vp);
  74.         vp.DWidth = WIDTH;
  75.         vp.DHeight = HEIGHT;
  76.         vp.RasInfo = &ri;
  77.         InitBitMap(&b,DEPTH,WIDTH,HEIGHT);
  78.         ri.BitMap = &b;
  79.         ri.RxOffset = 0;        
  80.         ri.RyOffset = 0;
  81.         ri.Next = NULL;
  82.         cm = GetColorMap(4);    
  83.         colorpalette = cm->ColorTable;
  84.         for(i=0; i<4; i++)
  85.                 *colorpalette++ = colortable[i];
  86.         vp.ColorMap = cm;       
  87.         for(i=0; i<DEPTH; i++)
  88.            {
  89.            b.Planes[i] = (PLANEPTR)AllocRaster(WIDTH,HEIGHT);
  90.            if(b.Planes[i] == NULL) exit(NOT_ENOUGH_MEMORY);
  91.            }
  92.  
  93.         MakeVPort( &v, &vp );   
  94.         MrgCop( &v );           
  95.         for(i=0; i<2; i++)
  96.                 {
  97.                 displaymem = (UBYTE *)b.Planes[i];
  98.                 for(j=0; j<RASSIZE(WIDTH,HEIGHT); j++)
  99.                         *displaymem++ = 0;      
  100.                 /* zeros to all bytes of the display area */                                    }
  101.  
  102.         LoadView(&v);
  103.         layer = CreateUpfrontLayer(&li,&b,0,0,200,140,FLAGS,NULL);
  104.         if(layer==NULL) exit(3);
  105.  
  106.         rp = layer->rp;
  107.  
  108.         SetAPen(rp,3);
  109.         RectFill(rp,0,0,199,139);       /* show the layer itself */
  110.  
  111.         j=10;                   /* initialize the rectangles */ 
  112.         for(i=0; i<10; i++)
  113.                 {
  114.                 rect[i].MinX = j;
  115.                 rect[i].MaxX = j + 8;
  116.                 rect[i].MinY = 20;
  117.                 rect[i].MaxY = 120;
  118.                 j += 16;
  119.                 }       
  120.                 
  121.         rgn = NewRegion();      /* get a new region to use */
  122.         if(rgn == NULL) exit(4);
  123.  
  124.         for(i=0; i<14; i++)
  125.                 OrRectRegion(rgn,&rect[i]);
  126.  
  127.         oldDamageList = layer->DamageList;
  128.         layer->DamageList = rgn;
  129.  
  130.         BeginUpdate(layer);
  131.  
  132.         /* here insert the drawing routines to draw something
  133.          * behind the slats.
  134.          */
  135.         x = 4;  y = 10;
  136.         SetAPen(rp,0);
  137.         SetDrMd(rp,JAM1);
  138.         RectFill(rp,0,0,199,139);
  139.         SetAPen(rp,1);
  140.         SetBPen(rp,0);
  141.         SetDrMd(rp,JAM2);
  142.         for(i=0; i<14; i++)
  143.         {
  144.                 Move(rp, x, y);
  145.                 Text(rp,"Behind A Fence",14);
  146.                 x += 4;  y += 9;
  147.         }
  148.         EndUpdate(layer);
  149.         layer->DamageList = oldDamageList;
  150.         DisposeRegion(rgn);
  151.  
  152.  
  153.         FOREVER
  154.            ;            /* do nothing till user resets machine */ 
  155.  
  156.         FreeMemory();   
  157.  
  158. }        /* end of main() */
  159.  
  160.  
  161. FreeMemory()
  162. {               /* return user and system-allocated memory to sys manager */
  163.  
  164.         for(i=0; i<DEPTH; i++)                  /* free the drawing area */
  165.            FreeRaster(b.Planes[i],WIDTH,HEIGHT);
  166.         FreeColorMap(cm);                       /* free the color map */
  167.                 /* free dynamically created structures */
  168.         FreeVPortCopLists(&vp);                 
  169.         FreeCprList(&v.LOFCprList);
  170.         return;
  171. }
  172.